package private

import (
	"dc-go/global"
	"dc-go/model"
	"dc-go/utils"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

type ApiUser struct{}

func (a *ApiUser) GetUserList(c *gin.Context) {
	var requestUserList model.RequestGetUserList
	if err := model.RequestShouldBindJSON(c, &requestUserList); err != nil {
		return
	}
	if userList, total, err := servicePrivate.ServiceUser.GetUserList(requestUserList); err != nil {
		global.DcLogger.Error("获取用户列表失败! ", zap.Any("err", err))
		model.ResponseErrorMessage("获取用户列表失败, "+err.Error(), c)
	} else {
		model.ResponseSuccessData(model.ResponsePage{
			Records:  userList,
			Page:     requestUserList.Page,
			PageSize: requestUserList.PageSize,
			Total:    total,
		}, c)
	}
}

// func (a *ApiUser) EditUser(c *gin.Context) {
// 	var toEditUser model.SysUser
// 	if err := model.RequestShouldBindJSON(c, &toEditUser); err != nil {
// 		return
// 	}
// 	if toEditUser.EmpeeAcct == "admin" && toEditUser.Status == "off" {
// 		model.ResponseErrorMessage("超级管理不能被禁用! ", c)
// 		return
// 	}
// 	toEditUser.UpdatedBy = utils.GetEmpeeAcct(c)
// 	if err := servicePrivate.ServiceUser.EditUser(toEditUser); err != nil {
// 		global.DcLogger.Error("编辑用户失败! ", zap.Any("err", err))
// 		model.ResponseErrorMessage("编辑用户失败, "+err.Error(), c)
// 	} else {
// 		global.DcLogger.Warn(utils.GetEmpeeAcct(c) + "编辑用户成功! ")
// 		model.ResponseSuccessMessage("编辑用户成功! ", c)
// 	}
// }

// func (a *ApiUser) AddUser(c *gin.Context) {
// 	var toAddUser model.RequestAddUser
// 	if err := model.RequestShouldBindJSON(c, &toAddUser); err != nil {
// 		return
// 	}
// 	var DcModelWithCreatedByAndUpdatedBy = model.DcModelWithCreatedByAndUpdatedBy{
// 		DcModel: global.DcModel{
// 			CreatedBy: utils.GetEmpeeAcct(c),
// 			Status:    toAddUser.Status,
// 			Sort:      toAddUser.Sort,
// 			Memo:      toAddUser.Memo,
// 		},
// 	}
// 	addUser := &model.SysUser{
// 		DcModelWithCreatedByAndUpdatedBy: DcModelWithCreatedByAndUpdatedBy,
// 		EmpeeAcct:                        toAddUser.EmpeeAcct,
// 		StaffName:                        toAddUser.StaffName,
// 		StaffId:                          toAddUser.StaffId,
// 		Mobile:                           toAddUser.Mobile,
// 		Email:                            toAddUser.Email,
// 	}
// 	if err := servicePrivate.ServiceUser.AddUser(addUser); err != nil {
// 		if err.Error() == "successWithNoDefaultPassword" {
// 			model.ResponseSuccessMessage("添加用户成功! 但未找到配置的默认密码, 此用户的密码设置为: 123456", c)
// 		} else {
// 			global.DcLogger.Error("添加用户失败! ", zap.Any("err", err))
// 			model.ResponseErrorMessage("添加用户失败, "+err.Error(), c)
// 		}
// 	} else {
// 		model.ResponseSuccessMessage("添加用户成功! ", c)
// 	}
// }

// func (a *ApiUser) DeleteUserById(c *gin.Context) {
// 	var toDeleteId model.RequestQueryById
// 	if err := model.RequestShouldBindJSON(c, &toDeleteId); err != nil {
// 		return
// 	}
// 	currentEmpeeAcct := utils.GetEmpeeAcct(c)
// 	err, currentUser := servicePrivate.ServiceUser.GetUserByEmpeeAcct(currentEmpeeAcct)
// 	if err != nil {
// 		global.DcLogger.Error("获取用户信息失败! ", zap.Any("err", err))
// 		model.ResponseErrorMessage("获取用户信息失败, "+err.Error(), c)
// 		return
// 	}
// 	if currentUser.Id == toDeleteId.Id {
// 		global.DcLogger.Error(utils.GetEmpeeAcct(c) + "你不能删除自己! ")
// 		model.ResponseErrorMessage("你不能删除自己! ", c)
// 		return
// 	}
// 	// 初始化时 admin 的 Id 为 1, 这里就这样判断了, 可以增加更多的逻辑。
// 	if toDeleteId.Id == 1 {
// 		global.DcLogger.Error(utils.GetEmpeeAcct(c) + "超级管理员不能被删除! ")
// 		model.ResponseErrorMessage("超级管理员不能被删除! ", c)
// 		return
// 	}
// 	if err := servicePrivate.ServiceUser.DeleteUserById(toDeleteId.Id); err != nil {
// 		global.DcLogger.Error(utils.GetEmpeeAcct(c)+"删除用户失败! ", zap.Any("err", err))
// 		model.ResponseErrorMessage("删除用户失败, "+err.Error(), c)
// 	} else {
// 		global.DcLogger.Warn(utils.GetEmpeeAcct(c) + "删除用户成功! ")
// 		model.ResponseSuccessMessage("删除用户成功! ", c)
// 	}
// }

func (a *ApiUser) QueryUserById(c *gin.Context) {
	var toQueryId model.RequestQueryById
	if err := model.RequestShouldBindJSON(c, &toQueryId); err != nil {
		return
	}
	if user, err := servicePrivate.ServiceUser.QueryUserById(toQueryId.Id); err != nil {
		global.DcLogger.Error("查找用户失败! ", zap.Any("err", err))
		model.ResponseErrorMessage("查找用户失败, "+err.Error(), c)
	} else {
		model.ResponseSuccessMessageData(gin.H{"records": user}, "查找用户成功! ", c)
	}
}

func (a *ApiUser) ResetPasswordToDefaultById(c *gin.Context) {
	var toResetPasswordId model.RequestQueryById
	if err := c.ShouldBindJSON(&toResetPasswordId); err != nil {
		global.DcLogger.Error("模型绑定失败! ", zap.Any("err", err))
		model.ResponseErrorMessage("模型绑定失败, "+err.Error(), c)
		return
	}
	if newPassword, err := servicePrivate.ServiceUser.ResetPasswordToDefaultById(toResetPasswordId.Id); err != nil {
		global.DcLogger.Error("重置用户密码失败! ", zap.Any("err", err))
		model.ResponseErrorMessage("重置用户密码失败, "+err.Error(), c)
	} else {
		model.ResponseSuccessMessage("重置用户密码成功! 新密码为"+newPassword, c)
	}
}

func (a *ApiUser) GetUserMenu(c *gin.Context) {
	menu, err := servicePrivate.ServiceUser.GetUserMenu(c)
	if err != nil {
		model.ResponseErrorMessage("获取用户菜单失败, "+err.Error(), c)
	} else {
		model.ResponseSuccessMessageData(gin.H{"records": menu}, "获取用户菜单成功! ", c)
	}
}

func (a *ApiUser) ChangePassword(c *gin.Context) {
	var toChangePassword model.RequestChangePassword
	if err := model.RequestShouldBindJSON(c, &toChangePassword); err != nil {
		return
	}
	empee_acct := utils.GetEmpeeAcct(c)
	if err := servicePrivate.ServiceUser.ChangePassword(empee_acct, toChangePassword); err != nil {
		global.DcLogger.Error("修改密码失败! ", zap.Any("err", err))
		model.ResponseErrorMessage("修改密码失败, "+err.Error(), c)
	} else {
		global.DcLogger.Warn(utils.GetEmpeeAcct(c) + "修改密码成功! ")
		model.ResponseSuccessMessage("修改密码成功! ", c)
	}
}
